"""
生产者和消费者，两个线程之间的通信
python的queue模块提供了同步的，线程安全的队列类，包括FIFO队列Queue,LIFO队列LifoQueue,和
优先级队列PriorityQueue。这些队列都实现了锁原理，能够在多线程中直接使用，可以使用队列来实现线程间的同步
"""
import threading
import queue
import random
import time


def product(q):
    i = 0
    while i < 10:
        num = random.randint(1, 100)
        q.put("生产者产生的数据：%d" % num)
        print("生产者产生数据：%d" % num)
        time.sleep(1)
        i += 1
    q.put(None)
    # 完成任务
    q.task_done()  # 标识队列任务添加完毕
    pass


def consumer(q):
    while True:
        item = q.get()
        if item is None:
            break
        print("消费者消费数据：%s" % item)
        time.sleep(3)
    # 完成任务
    q.task_done()
    pass


if __name__ == '__main__':
    q = queue.Queue(10)
    arr = []
    # 创建生产者
    th = threading.Thread(target=product, args=(q,))
    th.start()
    # 创建消费者
    tc = threading.Thread(target=consumer, args=(q,))
    tc.start()
    th.join()
    tc.join()
    print("end---------")
